// Function.bind()
/**
 * 
 * Function.bind()用于改变Function中的this执行，以及调用Function
 * 接收两个参数，第一个是当前作用域的this,剩下的参数位是传入该Function的参数
 * 如果第一个参数为null或undefind,则Function中的this默认指向全局对象
 * 
 * 和call的区别就是 bind()方法不会立即调用Function，而是返回处理后的函数
 * bind()既可以在bind()中添加参数
 * 也可以在通过bind()处理返回的函数中添加参数，二选一即可，同时加参数只有bind（）的参数生效
 * */ 

// 手写一个bind()
function bind(Fn, obj, ...args) {
  return function(...args2) {
    if(obj === undefined || obj === null) {
      obj = globalThis;
    }
    obj.temp = Fn;
    let result = obj.temp(...args,...args2);
    console.log(...args);
    console.log(...args2);
    /**
     * 
     * bind(add,obj,1,5);
     * nf(10,999)
     * 为什么接收的依然是1，5的结果
     * 因为...args 接收的是1，5,
     * 即使...args2有参数，也会优先给函数传入...args
     * **/ 
    delete obj.temp;
    return result

  }
}
